/**
 * 视图类
 */
#ifndef __VIEW_H__
#define __VIEW_H__

#include <RTCPage.h>
#include <RX8025.h>

// 416*240,(16*16字体)25*16，(24*24字体)17*8
// 320*240,(16*16字体)20*16，(24*24字体)13*8
// #define LINE_HEIGHT 20
#define LINE_HEIGHT 22
#define TEXT_SIZE 16
#define LEFT_SPACE 8

void drawStatusBar();

class View
{
public:
    /**
     * @brief 按键处理
     */
    virtual void handleKey(int key){};

    /**
     * 刷新视图
     */
    void refresh();

    /**
     * 初始化标志
     */
    static bool hasInit;

protected:
    /**
     * @brief 绘制视图
     */
    virtual void updateView(){};
};

// 主菜单
class Menu: public View
{
public:
    void handleKey(int key);

protected:
    void updateView();

private:
    char const *item[4] = {"图书阅读", "词条记忆", "番茄时钟", "视力训练"};
};

// 全屏时钟
class Clock : public View
{
public:
    void handleKey(int key);

protected:
    void updateView();
    // 是否正在同步时间
    bool syncing = false;
    // 已读取到的时间
    TIME_TM tm;
};

// 视力训练
class Gaze : public View
{
public:
    void handleKey(int key){};

protected:
    void updateView();
};

// 番茄钟
class Tomato : public View
{
public:
    void handleKey(int key);

protected:
    void updateView();
};

// 目录列表、文字阅读或记忆
class PageView : public View
{
public:
    PageView(RTCPage *pContent);
    void handleKey(int key){};

protected:
    void updateView();

    /**
     * @brief 逐行显示字符串
     * @param str 要显示的字符串
     * @param y 显示起始y坐标
     * @return 后接行显示y坐标
     */
    int drawText(char *str, int y);

private:
    int ctxY;
    int ctxOffset;
    RTCPage *content;
};

#endif